<template>
     <van-popup v-model="showPicker" round position="bottom">
        <van-picker
            show-toolbar
            :columns="weeks"
            :default-index="chooseIndex"
            @cancel="showPicker = false"
            @confirm="onConfirm"
        />
    </van-popup>
</template>
<script>
import moment from "moment";
export default {
    data(){
        return{
            showPicker:false,
            weeks:[],
            chooseIndex:0,
        }
    },
    mounted() {
        this.weeks = this.getWeeksInYear();
        this.chooseIndex = moment().isoWeek()-1;
    },
    methods:{
        onConfirm(value){
            console.log(value)
            this.$emit('onConfirm',value)
        },
        //获取以周为周期的数组
        getWeeksInYear() {
            let weeks = [];
            let currentDate = moment().startOf('year'); // 获取年初的日期
            let endDate = moment().add(7, 'days'); // 获取当前的日期往后7天
            // 循环直到当前日期
            while (currentDate.isBefore(endDate)) {
                // 检查这一天是否是周一（ISO周数系统的周一）
                if (currentDate.isoWeekday() === 1) {
                    // 计算当前周天的日期（从周一加6天）
                    let sunday = currentDate.clone().add(6, 'days');
        
                    // 如果周天在当前日期之前或与之相同，则添加到数组中
                    if (!sunday.isAfter(endDate)) {  
                        weeks.push({
                            text:`${currentDate.format('MM月DD号')}-${sunday.format('MM月DD号')}`,
                            startDate:currentDate.format('yyyy-MM-DD'),
                            endDate:sunday.format('yyyy-MM-DD')
                        });
                    }
                    // 否则，我们已经超出了当前日期的范围，可以停止循环  
                    // 但由于我们检查的是sunday.isAfter(endDate)，所以循环实际上会在下一次迭代中自然停止  
                }  
                // 移动到下一天  
                currentDate.add(1, 'days');  
            }
            // 如果当前日期正好是周一且在当前年份内（可能是今年的最后一天），则也将其加入数组  
            // 但由于我们的循环条件，这一步可能不是必需的，除非你想要确保包括一个不完整的周（如果今天是周日的话）  
            // 注意：在这个例子中，我们假设不完整的周不被包括在内  
            return weeks;  
        },
    }
}
</script>
<style lang="less" scoped>

</style>